var http = require('http');
var express = require('express');
var path = require('path');
var config = require('./config');
var log4js = require('log4js');
var app = express(); //生成一个express实例 app
var indexRoutes = require('./server/route/index');
var oauthRoutes = require('./server/route/oauth');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var request = require('request');

config.log4js.configure(); //log4js设置配置
var logger = log4js.getLogger('site');
config.log4js.express(app, log4js.getLogger('express')); //express加载日志中间件

// 模板引擎-腾讯artTemplate
var template = require('art-template/node/template-native.js');
template.config('base', ''); //指定模板目录
template.config('extname', '.html'); //指定模板后缀名
app.engine('html', template.__express); //注册模板引擎
app.set('view engine', 'html'); //设置视图模板引擎为html
app.set('views', path.join(__dirname, 'build/html')); //设置存放视图文件或者说模版文件的目录

// var options = {
//     maxAge: '3600000000'
// };

app.use(express.static(path.join(__dirname, 'build/static'))); //设置存放 image、css、js 等静态文件的目录

app.use(bodyParser.json()); //加载解析json的中间件
app.use(bodyParser.urlencoded({
    extended: false
})); //加载解析urlencoded请求体的中间件
app.use(cookieParser()); //加载解析cookie的中间件

oauthRoutes(app);
indexRoutes(app);
app.get('/**', function (req, res) {
    res.header('Cache-Control', 'no-cache');
    res.render('index');
});
app.post('/jsError', function (req, res) {
    request({
        url: config.apiBase + '/jsError',
        headers: {
            'Content-Type': 'application/json'
        },
        method: "POST",
        json: req.body
    });
    logger.warn(req.body);
    res.end();
});

//捕获404错误，并转发到错误处理器
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

//  将错误信息渲染error模版并显示到浏览器中。
app.use(function (err, req, res, next) {
    if (err) {
        logger.warn(err.message);
        if (err.statck) {
            logger.warn(err.statck);
        }
    }
    res.status(err.status || 500);
    res.render('error', {
        message: err.message
    });
});

process.on('uncaughtException', function (err) {
    //打印出错误
    logger.error(err);
    //打印出错误的调用栈方便调试
    logger.error(err.stack);
})

var server = http.createServer(app);
server.listen(config.port);
logger.info(config.port)